package main

import "fmt"

/*
  仅仅反转字母
给定一个字符串 S，返回 “反转后的” 字符串，其中不是字母的字符都保留在原地，而所有字母的位置发生反转。
示例 1：
输入："ab-cd"
输出："dc-ba"

示例 2：
输入："a-bC-dEf-ghIj"
输出："j-Ih-gfE-dCba"
*/
// 双指针法
func reverseOnlyLetters(S string) string {
	// 强制转换为rune
	sRune := []rune(S)
	left, right := 0, len(sRune)-1
	for left <= right { // 左右指针没有相遇
		// 左边的字符是字母
		if (string(sRune[left]) >= "a" && string(sRune[left]) <= "z") || (string(sRune[left]) >= "A" && string(sRune[left]) <= "Z") {
			// 右边的字符是字母
			if (string(sRune[right]) >= "a" && string(sRune[right]) <= "z") || (string(sRune[right]) >= "A" && string(sRune[right]) <= "Z") {
				sRune[left], sRune[right] = sRune[right], sRune[left]
				left++
				right--
			} else {
				right--
			}
		} else {
			left++
		}
	}
	return string(sRune)
}

func main() {
	//a := "ab-cd"
	//ss := []rune(a)
	//fmt.Println(ss[2], a)
	fmt.Println(reverseOnlyLetters("ab-cd"))
}
